package cn.dyp.com.logprint.action;

import org.json.JSONException;
import org.json.JSONObject;
import org.w3c.dom.Element;

import android.content.Context;
import android.util.Log;

import cn.dyp.com.logprint.R;
import cn.dyp.com.logprint.db.DatabaseUtil;
import cn.dyp.com.logprint.mail.MailSenderInfo;
import cn.dyp.com.logprint.mail.SimpleMailSender;
import cn.dyp.com.logprint.util.Util;

/**
 * @author zongbingwu 用户找回密码的请求处理类,从客户端请求body中取得用户名
 *         然后从检查该用户是否存在，如果存在，则将该用户的用户名和密码发送至用户邮箱
 */
public class FindPwdAction extends BaseAction {
	public static final String TAG = "findPassword";

	private Context context;

	public FindPwdAction(Context context) {
		this.context = context;
	}

	// jason协议的解析函数
	@Override
	protected String jasonPorcess(String param) {
		JSONObject jsonResponse = new JSONObject();
		try {
			JSONObject jsonRequest = new JSONObject(param);
			// 处理忘记密码请求
			String username = "";
			// 解析用户名
			if (jsonRequest.has("username")) {
				username = jsonRequest.getString("username");
				logObj = username;
			}
			// 通过用户名查找该用户的注册邮箱
			String email = DatabaseUtil.queryUserEmail(username, context);
			// 通过用户名查找该用户的密码
			String password = DatabaseUtil.queryUserPassword(username, context);
			// 如果密码和注册邮箱都找到，则将用户的用户名和密码发送至用户邮箱
			if (email != null && !email.equals("")) {
				// 返回结果和用户邮箱地址
				jsonResponse.put("result", "ok");
				jsonResponse.put("email", email);
				sendPasswordToEmail(username, email, password);
				logMsg += "result;ok, email:" + email;
			} else {
				jsonResponse.put("result", "failed");
				logMsg += "result;failed";
			}
			// 返回结果
			return jsonResponse.toString();
		} catch (JSONException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	// soap协议的解析函数
	@Override
	protected String soapPorcess(String param) {
		String username = "";
		String retSoapBody = "";
		// 从完整的soap协议内容中解析出soap body内容
		Element soapBodyEle = Util.getSoapBodyElement(param);
		// 解析用户名
		if (soapBodyEle != null) {
			username = Util.getChildElementValueStr(soapBodyEle, "username");
			logObj = username;
		}
		// 通过用户名查找该用户的注册邮箱
		String email = DatabaseUtil.queryUserEmail(username, context);
		// 通过用户名查找该用户的密码
		String password = DatabaseUtil.queryUserPassword(username, context);
		// 如果密码和注册邮箱都找到，则将用户的用户名和密码发送至用户邮箱
		if (email != null && !email.equals("")) {
			// 返回结果和用户邮箱地址
			retSoapBody = Util.getXmlElementStr("result", "ok");
			retSoapBody += Util.getXmlElementStr("email", email);
			sendPasswordToEmail(username, email, password);
			logMsg += "result;ok, email:" + email;
		} else {
			retSoapBody = Util.getXmlElementStr("result", "failed");
			logMsg += "result;failed";
		}
		// 返回结果
		return Util.getSoapXml(retSoapBody);
	}

	/**
	 * 将用户的用户名和密码发送至用户邮箱
	 * 
	 * @param username
	 *            用户名
	 * @param email
	 *            用户邮箱
	 * @param password
	 *            用户密码
	 */
	private void sendPasswordToEmail(String username, String email,
			String password) {
		if (username != null && email != null && password != null) {
			String sentStr = "username : " + username + ", password : "
					+ password;
			Log.d(TAG, "send password to " + email + ", content is [" + sentStr
					+ "]");
			MailSenderInfo mailInfo = new MailSenderInfo();
			// 设置发送邮件的服务器的IP和端口
			mailInfo.setMailServerHost("smtp.163.com");
			mailInfo.setMailServerPort("25");
			mailInfo.setValidate(true); // 需要身份验证
			// 以下是开发者的临时邮箱和密码，建议更换
			mailInfo.setUserName("maoguo151@163.com");
			mailInfo.setPassword("049074120");
			mailInfo.setFromAddress("maoguo151@163.com");

			mailInfo.setToAddress(email);
			mailInfo.setSubject(context.getString(R.string.find_password_exp));
			mailInfo.setContent(sentStr);
			// 这个类主要来发送邮件
			SimpleMailSender sms = new SimpleMailSender();
			// 发送文体格式
			sms.sendTextMail(mailInfo);
		}
	}

}
